#pragma once

#include <opencv2/opencv.hpp>

using namespace cv;

/**
 * mat数据分为两部分header和data，header中存储了基本的属性信息，data中存储了具体的图片像素数据
 * mat在赋值时指向的是同一个数据区，使用clone 函数可以拷贝一份新的数据区
 */

class MatDemo
{
public:
    void clone_test(cv::Mat& img);
    void pixel_visit_test(cv::Mat& img);
    void pixel_operators_test(cv::Mat& img);
    void tracking_bar_test(cv::Mat& img);
    void tracking_bar_test2(cv::Mat& img);
    void keyboard_test(cv::Mat& img);
    void color_style_test(cv::Mat& img);
    void bitwise_test(cv::Mat& img);
    void channel_test(cv::Mat& img);
    void inrange_test(cv::Mat& img);
    void pixel_statistics_test(cv::Mat& img);
    void draw_graphic_test(cv::Mat& img);
    void draw_graphic_test1(cv::Mat& img);
    void random_draw_test(cv::Mat& img);
    void mouse_event_test(cv::Mat& img);
    void cut_img_test(cv::Mat& img);
    void normalize_test(cv::Mat& img);
    void resize_test(cv::Mat& img);
    void flip_test(cv::Mat& img);
    void rotate_test(cv::Mat& img);
    void rotate_test1(cv::Mat& img);
    void video_test();
    void calcHist_test(cv::Mat& img);
    void calcHist_test1(cv::Mat& img);
    void histgram_test(cv::Mat& img);
    void blur_test(cv::Mat& img);
    void gaussian_test(cv::Mat& img);
    void bilateral_test(cv::Mat& img);
    void face_detect_test();
    void show_local_video();
    void save_video();
    void enhance_test();

    //https://www.bilibili.com/video/BV1A4W8e3ExP?spm_id_from=333.788.player.switch&vd_source=fda7fe78b685de27b0967dd65f569aed&p=8
    void new__test_1(cv::Mat& img);

    void threshold_test(cv::Mat& img);

    void to_cartoon(cv::Mat& img);
};
